package com.anolesoft.yr.mbus.cont.dto;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.anolesoft.yr.mbus.cont.entity.ContPayment;
import com.anolesoft.yr.mbus.contm.dao.ContmContentDao;
import com.anolesoft.yr.mbus.contm.dao.ContmStyleItemDao;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 存放着创建合同时候需要手工填写的内容 暂时先空着  有的时候再加
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ContMainDTO {
    public ContMainDTO(JSONObject jsonObject){
        this.objuid = jsonObject.getString("objuid");
        this.contTypeUid = jsonObject.getByte("contTypeUid");
        this.contTemplateUid = jsonObject.getString("contTemplateUid");
        this.isTemp = 0;
        this.signDate = jsonObject.getDate("signDate");
        this.signAddress = jsonObject.getString("signAddress");
        this.contCode = jsonObject.getString("contCode");
        this.customerContractCode = jsonObject.getString("customerContractCode");
        this.payment = jsonObject.getByte("payment");
        this.contTitle = jsonObject.getString("contTitle");
        this.partyAUid=jsonObject.getString("partyAUid");

        /**
         * 甲方委托方
         */
/*
        this.clientPartyA = jsonObject.getString();
*/
/*
        *//**
         * 甲方联系方式
         *//*
        this.contPartyA;

        *//**
         * 甲方通讯地址
         *//*
        this.addressPartyA;

        *//**
         * 甲方联系电话
         *//*
        this.phonePartyA;

        *//**
         * 甲方传真号码
         *//*
        this.faxPartyA;

        *//**
         * 甲方电子信箱
         *//*
        this.emailPartyA;

        *//**
         * 甲方银行名称
         *//*
        this.bankPartyA;

        *//**
         * 甲方银行账户
         *//*
        this.accountPartA;

        *//**
         * 甲方纳税人识别号
         *//*
        this.tariffPartyA;

        *//**
         * 乙方主键
         *//*
        this.partyBUid;

        *//**
         * 乙方委托方
         *//*
        this.clientPartyB;

        *//**
         * 乙方联系方式
         *//*
        this.contPartyB;

        *//**
         * 乙方通讯地址
         *//*
        this.addressPartyB;

        *//**
         * 乙方联系电话
         *//*
        this.phonePartyB;

        *//**
         * 乙方传真号码
         *//*
        this.faxPartyB;

        *//**
         * 乙方电子信箱
         *//*
        this.emailPartyB;

        *//**
         * 乙方银行名称
         *//*
        this.bankPartyB;

        *//**
         * 乙方银行账户
         *//*
        this.accountPartB;

        *//**
         * 乙方纳税人识别号
         *//*
        this.tariffPartyB;*/

        /**
         * 税率
         */
        this.tax = jsonObject.getBigDecimal("tax");
/*
        *//**
         * 合同金额（RMB)
         *//*
        this.amountRmb;

        *//**
         * 合同金额
         *//*
        this.amount;*/

        /**
         * 币种
         */
        this.currency=jsonObject.getString("currency");

        /**
         * 汇率
         */
        this.exchangeRate=jsonObject.getBigDecimal("exchangeRate");;

    /*    *//**
         * 合同状态
         *//*
        this.contState;

        *//**
         * 打印次数
         *//*
        this.printNum;

        *//**
         * 创建人(合同销售负责人)
         *//*
        this.cUserUid;

        *//**
         * 创建时间
         *//*
        this.cTime;

        *//**
         * 修改人
         *//*
        this.mUserUid;

        *//**
         * 修改时间
         *//*
        this.mTime;

        *//**
         * 备注
         */
        this.remark = jsonObject.getString("remark");
/*

        */
/**
         * 甲方企业法人姓名
         *//*

        this.corporationPartA;

        */
/**
         * 乙方企业法人姓名
         *//*

        this.corporationPartB;

        */
/**
         * 甲方邮政编码
         *//*

        this.postcodePartA;

        */
/**
         * 乙方邮政编码
         *//*

        this.postcodePartB;
*/

        /**
         * 服务开始时间
         */
        this.startTime=jsonObject.getDate("startTime");

        /**
         * 服务结束时间
         */
        this.endTime = jsonObject.getDate("endTime");

        /**
         * 服务时长
         */
        this.year = jsonObject.getBigDecimal("year");

        /**
         * 滞纳金/天
         */
        this.lateFees=jsonObject.getBigDecimal("lateFees");

        /**
         * miss率控制值
         */
        this.miss = jsonObject.getBigDecimal("miss");

        /**
         * doa控制值
         */
        this.doa = jsonObject.getBigDecimal("doa");;

        /**
         * miss罚款
         */
        this.missFine= jsonObject.getBigDecimal("missFine");;

        /**
         * doa罚款
         */
        this.doaFine= jsonObject.getBigDecimal("doaFine");;

        /**
         * 甲方押金
         */
        this.deposit= jsonObject.getBigDecimal("deposit");;

        /**
         * 调解人
         */
        this.mediator= jsonObject.getString("mediator");;

        /**
         * 交货时间（合同签订后多少天）
         */
        this.deliveryDay= jsonObject.getBigDecimal("deliveryDay");;

        /**
         * 交货方式
         */
        this.deliveryType= jsonObject.getString("deliveryType");;

        /**
         * 运输方式
         */
        this.transportType= jsonObject.getString("transportType");;

        /**
         * 运费承担方
         */
        this.freightBear =jsonObject.getString("freightBear");;

        /**
         * 收货地址
         */
        this.deliveryAddress =jsonObject.getString("deliveryAddress");;

        /**
         * 收获公司名称
         */
        this.deliveryCompanyName= jsonObject.getString("deliveryCompanyName");

        /**
         * 收货人姓名
         */
        this.deliveryName= jsonObject.getString("deliveryName");

        /**
         * 收货人联系电话
         */
        this.deliveryPhone = jsonObject.getString("deliveryPhone");




    }
    @Autowired
    private ContmContentDao contmContentDao;
    @Autowired
    private ContmStyleItemDao contmStyleItemDao;
    /**
     * 主键
     */
    private String objuid;

    /**
     * 合同类型主键
     */
    private Byte contTypeUid;

    /**
     * 合同模板表主键
     */
    private String contTemplateUid;

    /**
     * 是否临时合同
     */
    private Byte isTemp;

    /**
     * 签订日期
     */
    private Date signDate;

    /**
     * 签订地点
     */
    private String signAddress;

    /**
     * 合同编号
     */
    private String contCode;

    /**
     * 客户合同编号
     */
    private String customerContractCode;

    /**
     * 支付方式
     */
    private Byte payment;

    /**
     * 项目名称
     */
    private String contTitle;

    /**
     * 甲方主键
     */
    private String partyAUid;

    /**
     * 甲方委托方
     */
    private String clientPartyA;

    /**
     * 甲方联系方式
     */
    private String contPartyA;

    /**
     * 甲方通讯地址
     */
    private String addressPartyA;

    /**
     * 甲方联系电话
     */
    private String phonePartyA;

    /**
     * 甲方传真号码
     */
    private String faxPartyA;

    /**
     * 甲方电子信箱
     */
    private String emailPartyA;

    /**
     * 甲方银行名称
     */
    private String bankPartyA;

    /**
     * 甲方银行账户
     */
    private String accountPartA;

    /**
     * 甲方纳税人识别号
     */
    private String tariffPartyA;

    /**
     * 乙方主键
     */
    private String partyBUid;

    /**
     * 乙方委托方
     */
    private String clientPartyB;

    /**
     * 乙方联系方式
     */
    private String contPartyB;

    /**
     * 乙方通讯地址
     */
    private String addressPartyB;

    /**
     * 乙方联系电话
     */
    private String phonePartyB;

    /**
     * 乙方传真号码
     */
    private String faxPartyB;

    /**
     * 乙方电子信箱
     */
    private String emailPartyB;

    /**
     * 乙方银行名称
     */
    private String bankPartyB;

    /**
     * 乙方银行账户
     */
    private String accountPartB;

    /**
     * 乙方纳税人识别号
     */
    private String tariffPartyB;

    /**
     * 税率
     */
    private BigDecimal tax;

    /**
     * 合同金额（RMB)
     */
    private BigDecimal amountRmb;

    /**
     * 合同金额
     */
    private BigDecimal amount;

    /**
     * 币种
     */
    private String currency;

    /**
     * 汇率
     */
    private BigDecimal exchangeRate;

    /**
     * 合同状态
     */
    private Byte contState;

    /**
     * 打印次数
     */
    private Byte printNum;

    /**
     * 创建人(合同销售负责人)
     */
    private String cUserUid;

    /**
     * 创建时间
     */
    private Date cTime;

    /**
     * 修改人
     */
    private String mUserUid;

    /**
     * 修改时间
     */
    private Date mTime;

    /**
     * 备注
     */
    private String remark;

    /**
     * 甲方企业法人姓名
     */
    private String corporationPartA;

    /**
     * 乙方企业法人姓名
     */
    private String corporationPartB;

    /**
     * 甲方邮政编码
     */
    private String postcodePartA;

    /**
     * 乙方邮政编码
     */
    private String postcodePartB;

    /**
     * 服务开始时间
     */
    private Date startTime;

    /**
     * 服务结束时间
     */
    private Date endTime;

    /**
     * 服务时长
     */
    private BigDecimal year;

    /**
     * 滞纳金/天
     */
    private BigDecimal lateFees;

    /**
     * miss率控制值
     */
    private BigDecimal miss;

    /**
     * doa控制值
     */
    private BigDecimal doa;

    /**
     * miss罚款
     */
    private BigDecimal missFine;

    /**
     * doa罚款
     */
    private BigDecimal doaFine;

    /**
     * 甲方押金
     */
    private BigDecimal deposit;

    /**
     * 调解人
     */
    private String mediator;

    /**
     * 交货时间（合同签订后多少天）
     */
    private BigDecimal deliveryDay;

    /**
     * 交货方式
     */
    private String deliveryType;

    /**
     * 运输方式
     */
    private String transportType;

    /**
     * 运费承担方
     */
    private String freightBear;

    /**
     * 收货地址
     */
    private String deliveryAddress;

    /**
     * 收获公司名称
     */
    private String deliveryCompanyName;

    /**
     * 收货人姓名
     */
    private String deliveryName;

    /**
     * 收货人联系电话
     */
    private String deliveryPhone;

    /**
     * 正式合同编号
     */
    private String formalContract;

    private List<ContContentDTO> contContents;


    private static final long serialVersionUID = 1L;

    private List<ContPayment> contPayments;


    public JSONObject toJson() {
        JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(this));
        JSONArray array = new JSONArray();
        contContents.forEach(a->{
            array.add(a.toJson());
        });
        jsonObject.put("child",array);
        return jsonObject;
    }

}
